#
# Departamento de Ciência da Computação
# Tradutores 02/2009 - turma A
# Professor Marco Aurélio
# Alunos: Danilo Gaby Andersen Trindade - 06/82039
#         Alex Rodrigo de Oliveira      - 06/30403
#

# Makefile para compilar o trabalho


# Macros do compilador
CC = g++
CFLAGS = -Isrc/includes/ -g3 -Wall


# Macros de diretórios
LEX = src/1_lexico
SINT = src/2_sintatico
SEMAN = src/3_semantico
GER = src/4_gerador
INTER = src/5_interpretador
INC = src/includes
TEST = src/test


# Compilar tudo
all: global lexico sintatico semantico gerador
	

# Constrói binário do compilador
install: all
	$(CC) build/*.o -o bin/dc


# Apagar arquivos gerados
clean:
	rm -f bin/*
	rm -f build/*


# Compila a main
global: build/global.o

build/global.o: src/global.cpp
	$(CC) $(CFLAGS) $< -c -o $@


# Compila o analisador léxico
lexico: build/scanner.o

build/scanner.o: build/scanner.cpp $(INC)/tokens.h
	$(CC) $(CFLAGS) $< -c -o $@

build/scanner.cpp: $(LEX)/scanner.lex
	flex -o $@ $<

$(INC)/tokens.h: $(SINT)/parser.y
	bison -d -o build/tokens.c $<
	mv build/tokens.h $@


# Compila o analisador sintático
sintatico: build/parser.o

build/parser.o: build/parser.cpp
	$(CC) $(CFLAGS) $< -c -o $@

build/parser.cpp: $(SINT)/parser.y
	bison -o $@ $<


# Compila o analisador semântico
semantico: build/actions.o build/table.o

build/actions.o: $(SEMAN)/actions.cpp
	$(CC) $(CFLAGS) $< -c -o $@

build/table.o: $(SEMAN)/table.cpp
	$(CC) $(CFLAGS) $< -c -o $@


# Compila o gerador de código
gerador: build/code.o

build/code.o: $(GER)/code.cpp
	$(CC) $(CFLAGS) $< -c -o $@

